package data

import (
	"context"
	"github.com/jinzhu/copier"
	"user/internal/biz"
	"user/internal/data/ent"
)

func ToBizUser(u *ent.User) (*biz.User, error) {
	var user biz.User
	if err := copier.Copy(&user, u); err != nil {
		return nil, err
	}

	return &user, nil
}

type userRepo struct {
	data *Data
}

func NewUserRepo(data *Data) biz.UserRepo {
	return &userRepo{data: data}
}

func (r *userRepo) Save(ctx context.Context, g *biz.User) (*biz.User, error) {
	u, err := r.data.entClient.User.Create().SetName(g.Username).SetEmail(g.Email).
		SetMobile(g.Mobile).SetPassword(g.Password).Save(ctx)
	if err != nil {
		return nil, err
	}

	bizUser, err := ToBizUser(u)
	if err != nil {
		return nil, err
	}

	return bizUser, nil
}

func (r *userRepo) Update(ctx context.Context, g *biz.User) (*biz.User, error) {
	return g, nil
}

func (r *userRepo) FindByID(context.Context, int64) (*biz.User, error) {
	return nil, nil
}

func (r *userRepo) ListByHello(context.Context, string) ([]*biz.User, error) {
	return nil, nil
}

func (r *userRepo) ListAll(context.Context) ([]*biz.User, error) {
	return nil, nil
}
